package com.ybkj.daijia;

import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
import org.springframework.util.StringUtils;

@Data
public class Setting implements Serializable {

    public static final String GAO_DE_SDK = "gaode";
    public static final String LOCAL_COMPUTE = "local";
    public static final String BAIDU_SDK = "baidu";
    /**
     *
     */
    private static final long serialVersionUID = 2321630955967369187L;
    /**
     * 工作开始时间 0 - 23
     */
    private int workBegin;
    /**
     * 保险费/信息费扣取点
     */
    private InfoFeeType infoFeeType;
    /**
     * 保险费/信息费金额（代驾）
     */
    private double infoFee;
    /**
     * 保险费/信息费金额(专车)
     */
    private double infoFeeZhuan;
    /**
     * 保险费/信息费金额(货运)
     */
    private double infoFeeFreight;
    /**
     * 保险费/信息费金额(跑腿)
     */
    private double infoFeeErrand;
    /**
     * 保险费/信息费金额(城际专线)
     */
    private double infoFeeCityline;
    /**
     * 优惠劵是否参与提成
     */
    private boolean couponTicheng;
    /**
     * 是否上传监管平台信息
     */
    private boolean upPlatformInfo;

    /**
     * 是否开启双因子认证
     */
    private boolean doubleFactor;

    /**
     * 允许直接呼叫司机
     */
    private boolean allowCallDriver;
    /**
     * 司机余额低于该值不能上班 0不生效
     */
    private Double lowestWorkVirtual;
    /**
     * 调度中心联系电话，如果不能呼叫司机则呼叫此号码
     */
    private String serviceCallCenter;
    /**
     * 公司网站地址
     */
    private String companyWebURL;

    /**
     * 附近司机公里数
     */
    private Double nearDriversKm;
    /**
     * 附近司机人数
     */
    private Integer nearDriversAmount;
    /**
     * (司机端)附近司机公里数
     */
    private Double nearDriversKm2;
    /**
     * (司机端)附近司机人数
     */
    private Integer nearDriversAmount2;
    /**
     * 自动收回时间
     */
    private int revokeTime;
    /**
     * 专线预约时间
     */
    private int bookTimeZhuanxian;

    /**
     * 司机抢单公里数
     */
    private Double rushOrderKm;

    /**
     * 第一阶段自动派单距离
     */
    private Double autoPaidanKm1;
    /**
     * 第一阶段自动派单时间
     */
    private Integer autoPaidanTime1;
    /**
     * 第二阶段自动派单距离
     */
    private Double autoPaidanKm2;
    /**
     * 第二阶段自动派单时间
     */
    private Integer autoPaidanTime2;
    /**
     * 第三阶段自动派单距离
     */
    private Double autoPaidanKm3;
    /**
     * 第三阶段自动派单时间
     */
    private Integer autoPaidanTime3;
    /**
     * 是否开启代驾自动派单
     */
    private boolean autoPaidan;

    /**
     * 是否开启专车自动派单
     */
    private boolean autoPaidanZhuanche;

    /**
     * 是否开启城际专线自动派单
     */
    private boolean autoPaidanZhuanxian;

    /**
     * 是否开启跑腿自动派单(暂无此功能设置)
     */
    // private boolean autoPaidanErrand;

    /**
     * 是否开启货运自动派单(暂无此功能设置)
     */
    // private boolean autoPaidanFreight;
    /**
     * 是否允许司机抢单(代驾)
     */
    private boolean allowRushOrder;
    /**
     * 是否允许司机抢单(专车)
     */
    private boolean allowRushOrderZhuanche;
    /**
     * 是否允许司机抢单（城际专线）
     */
    private boolean allowRushOrderZhuanxian;
    /**
     * 是否允许司机抢单（跑腿）
     */
    private boolean allowRushOrderErrand;
    /**
     * 是否允许司机抢单（货运）
     */
    private boolean allowRushOrderFreight;

    /**
     * 第一阶段抢单推送距离
     */
    private Double rushOrderKm1;
    /**
     * 第一阶段抢单推送间隔时间
     */
    private Integer rushOrderTime1;
    /**
     * 第二阶段抢单推送距离
     */
    private Double rushOrderKm2;
    /**
     * 第二阶段抢单推送间隔时间
     */
    private Integer rushOrderTime2;
    /**
     * 第三阶段抢单推送距离
     */
    private Double rushOrderKm3;
    /**
     * 第三阶段抢单推送间隔时间
     */
    private Integer rushOrderTime3;

    /**
     * 是否允许工作車
     */
    private boolean allowWorkCar;
    /**
     * 是否允许工作車轉單
     */
    private boolean allowWorkCarZhuandan;
    /**
     * 是否允许司机转单
     */
    private boolean allowDriverZhuandan;
    /**
     * 是否允许司机销单
     */
    private boolean allowDriverCancel;
    /**
     * 是否目的地必填
     */
    private boolean mustToPlace;
    /**
     * 是否客户信息必填
     */
    private boolean mustMemberInfo;
    /**
     * 是否允许司机修改金额
     */
    private boolean allowModifyCash;
    /**
     * 是否允许司机报销金额
     */
    private boolean allowBaoxiao;
    /**
     * 是否允许司机代付时金额为负
     */
    private boolean allowHelppayNe;
    /**
     * 是否显示保险
     */
    private boolean insurancesShow;
    /**
     * 注册时图片是否上传
     */
    private boolean employApplyImgNessesary;
    /**
     * 是否开启代付
     */
    private boolean openHelpPay;

    /**
     * 是否开启调价
     */
    private boolean justPrice;

    /**
     * 是否允许跑腿单定价
     */
    private boolean paotuiFixPrice;

    /**
     * 客服电话方式 0主公司 1各自公司
     */
    private Integer whichServicePhone;

    /**
     * 服务协议
     */
    private String agreement;

    /**
     * 加盟内容
     */
    private String businessContent;

    /**
     * 分享标题
     */
    private String shareTitle;
    /**
     * 分享内容
     */
    private String shareContent;
    /**
     * 分享二维码
     */
    private String shareTwodCode;
    /**
     * 关于我们网站
     */
    private String aboutWeb;
    /**
     * 关于我们电话
     */
    private String aboutPhone;

    /**
     * 关于我们图片
     */
    private String aboutLogo;

    /**
     * 会员申请说明
     */
    private String memberApplyContent;

    /**
     * 系统网址
     */
    private String webUrl;

    // 支付配置

    private BigDecimal payCash1;

    /**
     * 银联支付ID(merId)
     */
    private String merId;
    /**
     * 银联支付证书
     */
    private String acpsdkSignCertPath;
    /**
     * 敏感信息加密证书
     */
    private String acpProdEnc;
    /**
     * 验签中级证书
     */
    private String acpProdMiddle;
    /**
     * 验签根证书
     */
    private String acpProdRoot;
    /**
     * 签名证书密码
     */
    private String acpsdkSignCertPwd;

    /**
     * 翼支付merchantId（商户id）
     */
    private String merchantId;
    /**
     * 翼支付merKey（商户key）
     */
    private String merKey;
    /**
     * 翼支付riskcontrolinfo（风控信息Json 字符串）
     */
    private String riskcontrolinfo;
    /**
     * 翼支付mch_pwd（商户密码）
     */
    private String mchPwd;


    /**
     * 派单设置  预派单   推荐司机距离
     */
    private Double paidanKm;

    private BigDecimal payCash2;

    private BigDecimal payCash3;

    /**
     * 支付宝 商户ID PartnerID
     */
    private String alipayPartnerID;
    /**
     * 支付宝 商户账号 SellerID
     */
    private String alipaySellerID;
    /**
     * 支付宝 商户的私钥 PartnerPrivKey
     */
    private String alipayPartnerPrivKey;
    /**
     * 支付宝 商户的公钥 PartnerPublicKey
     */
    private String alipayPartnerPublicKey;

    /**
     * 微信支付 微信开发平台应用id APP_ID（客户端）
     */
    private String wxAppID;
    /**
     * 微信支付 应用对应的凭证 App_Secret（客户端）
     */
    private String wxAppSecret;
    /**
     * 微信支付 微信开发平台应用id APP_ID（服务端）
     */
    private String wxAppIDEmploy;
    /**
     * 微信支付 应用对应的凭证 App_Secret（服务端）
     */
    private String wxAppSecretEmploy;
    /**
     * 微信支付 财付通商户号 PARTNER_ID（客户端）
     */
    private String wxPartnerID;
    /**
     * 微信支付 商户号对应的密钥 Partner_Key（客户端）
     */
    private String wxPartnerKey;
    /**
     * 微信支付 财付通商户号 PARTNER_ID（服务端）
     */
    private String wxPartnerIDEmploy;
    /**
     * 微信支付 商户号对应的密钥 Partner_Key（服务端）
     */
    private String wxPartnerKeyEmploy;
    /**
     * 微信支付 初始密钥 APP_KEY
     */
    private String wxAppKEY;

    /**
     * 派单设置 自动下线时间
     */
    private int autoOfflineTime;

    /**
     * 司机快要到达目的地推送给工作车 （小于arriveToPlaceKm公里）
     */
    private Double arriveToPlaceKm;

    
    
    private String getuiDriverAppID;
    
    
    private String getuiDriverAppKey;
    
    
    private String getuiDriverMaster;

    /**
     * 个推AppID
     */
    private String getuiAppID;
    /**
     * 个推AppKey
     */
    private String getuiAppKey;
    /**
     * 个推Master
     */
    private String getuiMaster;
    /**
     * 个推AppID通用版
     */
    private String getuiAppIDGeneral;
    /**
     * 个推AppKey通用版
     */
    private String getuiAppKeyGeneral;
    /**
     * 个推Master通用版
     */
    private String getuiMasterGeneral;


    /**
     * 个推客户端 AppID
     */
    private String getuiMemberAppID;
    /**
     * 个推客户端 AppKey
     */
    private String getuiMemberAppKey;
    /**
     * 个推客户端 Master
     */
    private String getuiMemberMaster;

    /**
     * 极光司机端AppKey
     */
    private String jiguangEmployAppKey;
    /**
     * 极光司机端MasterSecret
     */
    private String jiguangEmployMasterSecret;
    /**
     * 极光司机端AppKey通用版
     */
    private String jiguangEmployAppKeyGeneral;
    /**
     * 极光司机端MasterSecret通用版
     */
    private String jiguangEmployMasterSecretGeneral;

    /**
     * 极光客户端AppKey
     */
    private String jiguangPassengerAppKey;
    /**
     * 极光客户端MasterSecret
     */
    private String jiguangPassengerMasterSecret;

    /**
     * 后台订单记录key
     */
    private String secKey;

    /**
     * 司机附近跑腿单距离
     */
    private Double nearPaotuiOrdersKm;
    /**
     * 跑腿允许司机最多抢多少个单
     */
    private Integer errandGrabAmount;
    /**
     * 查询附近多少公里内的货运司机
     */
    private Double nearFreightDriversKm;

    /**
     * 专车是否预付费
     */
    private boolean zhuanchePrePay;
    /**
     * 代驾是否预付费
     */
    private boolean daijiaPrePay;
    /**
     * 跑腿是否预付费
     */
    private boolean paotuiPrePay;
    /**
     * 跑腿计价方式 0:预算费用 1:计价器费用
     */
    private Integer errandValuationMethod;
    /**
     * 短信是否使用主公司模板
     */
    private boolean smsMainCompany;

    /**
     * 提现金额基数
     */
    private BigDecimal moenyBase;

    /**
     * 提现金额最小值
     */
    private BigDecimal startQuota;

    /**
     * 提现金额最大值
     */
    private BigDecimal endQuota;

    /**
     * 提现备注
     */
    private String remarks;

    /**
     * 有害信息屏蔽内容字段
     */
    private String filterStr;
    /**
     * 预约订单时间(专车)
     */
    private Integer bookTimeZhuan;

    /**
     * 专车预约订单同时接单数量
     */
    private Integer zhuanYuyueMax;

    /**
     * 服务人员接预约订单时间
     */
    private Integer zhuanYuyueTime;

    /**
     * 是否开启跑腿订单池
     */
    private boolean isErrandOrderPool;


    private Double driverRebateMoney;

    /**
     * app地址
     */
    //安卓司机端
    private String androidDriver;
    //安卓客户端
    private String androidCustomer;
    /**
     * 自动回收订单时间
     */
    private Integer autoCancelOrderTime;
    /**
     * 是否开启自动消单
     */
    private boolean autoCancelOrder;

    private String weixinUrl;

    private boolean randomRedPacket;

    private Double randomRedPacketMoney;

    private String randomRedPacketCycle;

    /***
     * redis 配置， 放在config文件， 正式环境加载出问题了
     */
    private String redisUrl;

    private Integer redisPort;

    private String redisPassword;

    /***
     * 高德
     */
    private String computeMiles;
    private String gaodeKey;
    private int gaodeSid;
    private int gaodeTid;

    private String baiduKey;

    /**
     * 快车自动回收订单时间毫秒
     */
    private Integer kuaicheAutoCancelOrderTime;

    /**
     * 是否开启快车自动消单
     */
    private boolean kuaicheAutoCancelOrder;

    /**
     * 专线自动回收订单时间毫秒
     */
    private Integer zhuanXianAutoCancelOrderTime;
    /**
     * 是否开启专线 自动消单
     */
    private boolean zhuanxianAutoCancelOrder;

    /**
     * 司机是否绑定手机
     */
    private boolean driverBindPhone;
    
    
    public String getAndroidDriver() {
        return androidDriver + "?timestamp=" + System.currentTimeMillis();
    }

    public String getAndroidCustomer() {
        return androidCustomer + "?timestamp=" + System.currentTimeMillis();
    }

    public void setJiguangEmployMasterSecretGeneral(
        String jiguangEmployMasterSecretGeneral) {
        this.jiguangEmployMasterSecretGeneral = jiguangEmployMasterSecretGeneral;
    }

    public Integer getZhuanYuyueMax() {
        if (null == zhuanYuyueMax) {
            return 0;
        }
        return zhuanYuyueMax;
    }

    public Integer getBookTimeZhuan() {
        if (null == bookTimeZhuan) {
            return 0;
        }
        return bookTimeZhuan;
    }

    public Integer getZhuanYuyueTime() {
        if (null == zhuanYuyueTime) {
            return 0;
        }
        return zhuanYuyueTime;
    }


    public InfoFeeType getInfoFeeType() {
        if (null == infoFeeType) {
            return InfoFeeType.none;
        }
        return infoFeeType;
    }

    // public String getSmsAppKey() {
    // if (StringUtils.isEmpty(smsAppKey)) {
    // return "";
    // }
    // return smsAppKey;
    // }
    //
    // public void setSmsAppKey(String smsAppKey) {
    // this.smsAppKey = smsAppKey;
    // }
    //
    // public String getSmsSecretKey() {
    // if (StringUtils.isEmpty(smsSecretKey)) {
    // return "";
    // }
    // return smsSecretKey;
    // }
    //
    // public void setSmsSecretKey(String smsSecretKey) {
    // this.smsSecretKey = smsSecretKey;
    // }

    public String getServiceCallCenter() {
        if (StringUtils.isEmpty(serviceCallCenter)) {
            return "";
        }
        return serviceCallCenter;
    }

    public Double getNearDriversKm() {
        if (null == nearDriversKm) {
            return 5d;
        }
        return nearDriversKm;
    }

    public Integer getNearDriversAmount() {
        if (null == nearDriversAmount) {
            return 0;
        }
        return nearDriversAmount;
    }

    public Double getNearDriversKm2() {
        if (null == nearDriversKm2) {
            return 5d;
        }
        return nearDriversKm2;
    }

    public Integer getNearDriversAmount2() {
        if (null == nearDriversAmount2) {
            return 0;
        }
        return nearDriversAmount2;
    }

    public Double getRushOrderKm() {
        if (null == rushOrderKm) {
            return 5d;
        }
        return rushOrderKm;
    }

    public Integer getWhichServicePhone() {
        if (null == whichServicePhone) {
            return 0;
        }
        return whichServicePhone;
    }

    public Double getPaidanKm() {
        if (null == paidanKm) {
            return 5d;
        }
        return paidanKm;
    }

    public Double getArriveToPlaceKm() {
        if (null == arriveToPlaceKm) {
            return 5d;
        }
        return arriveToPlaceKm;
    }

    public Double getLowestWorkVirtual() {
        if (null == lowestWorkVirtual) {
            return 0d;
        }
        return lowestWorkVirtual;
    }


    public String getSecKey() {
        if (StringUtils.isEmpty(secKey)) {
            return "";
        }
        return secKey;
    }

    public Double getAutoPaidanKm1() {
        if (null == autoPaidanKm1) {
            return 1d;
        }
        return autoPaidanKm1;
    }

    public Integer getAutoPaidanTime1() {
        if (null == autoPaidanTime1) {
            return 5;
        }
        return autoPaidanTime1;
    }

    public Double getAutoPaidanKm2() {
        if (null == autoPaidanKm2) {
            return 2d;
        }
        return autoPaidanKm2;
    }

    public Integer getAutoPaidanTime2() {
        if (null == autoPaidanTime2) {
            return 20;
        }
        return autoPaidanTime2;
    }

    public Double getAutoPaidanKm3() {
        if (null == autoPaidanKm3) {
            return 5d;
        }
        return autoPaidanKm3;
    }

    public Integer getAutoPaidanTime3() {
        if (null == autoPaidanTime3) {
            return 60;
        }
        return autoPaidanTime3;
    }

    public Double getRushOrderKm1() {
        if (null == rushOrderKm1) {
            return 3d;
        }
        return rushOrderKm1;
    }

    public Integer getRushOrderTime1() {
        if (null == rushOrderTime1) {
            return 0;
        }
        return rushOrderTime1;
    }

    public Double getRushOrderKm2() {
        if (null == rushOrderKm2) {
            return 5d;
        }
        return rushOrderKm2;
    }

    public Integer getRushOrderTime2() {
        if (null == rushOrderTime2) {
            return 5;
        }
        return rushOrderTime2;
    }

    public Double getRushOrderKm3() {
        if (null == rushOrderKm2) {
            return 8d;
        }
        return rushOrderKm3;
    }

    public Integer getRushOrderTime3() {
        if (null == rushOrderTime3) {
            return 10;
        }
        return rushOrderTime3;
    }


    public Double getNearPaotuiOrdersKm() {
        if (null == nearPaotuiOrdersKm) {
            return 5d;
        }
        return nearPaotuiOrdersKm;
    }

    public Integer getErrandGrabAmount() {
        if (null == errandGrabAmount) {
            return 0;
        }
        return errandGrabAmount;
    }

    public Double getNearFreightDriversKm() {
        return (nearFreightDriversKm != null ? nearFreightDriversKm : 0);
    }
}
